﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;

//namespace ArtMath
//{
//    /// <summary>
//    /// 图
//    /// </summary>
//    public abstract class Graph<T>
//    {
//        public List<GraphNode<T>> Nodes { get; } = new List<GraphNode<T>>();
//        public List<GraphDirectedEdge<T>> DirectedEdges { get; } = new List<GraphDirectedEdge<T>>();
//        public GraphNode<T> AddNode(T data)
//        {
//            GraphNode<T> node = new GraphNode<T>(data, this);
//            Nodes.Add(node);
//            return node;
//        }
//        public abstract void AddEdge(GraphNode<T> node1, GraphNode<T> node2);
//        public void DeleteNode(GraphNode<T> node)
//        {
//            //删除所有边
//            while (node.ArriveEdges.Count > 0)
//            {
//                deleteEdge(node.ArriveEdges[0]);
//            }
//            while (node.DepartEdges.Count > 0)
//            {
//                deleteEdge(node.DepartEdges[0]);
//            }
//            Nodes.Remove(node);
//        }
//        public abstract void DeleteEdge(GraphNode<T> node1, GraphNode<T> node2);
//        protected void deleteEdge(GraphDirectedEdge<T> edge)
//        {
//            edge.Source = edge.Destination = null;
//            DirectedEdges.Remove(edge);
//        }
//    }
//}
